package framework;

import javax.swing.JPanel;

/**
 * This is the interface for the SelfDrawCell, a wrapper for a cell and a
 * client-defined method that displays cells on the frame initialized in
 * Display.
 * 
 */

public interface SelfDrawCellInterface {

	/**
	 * Returns the cell stored in this selfdraw cell.
	 * 
	 * @return CellInterface c - get the cell wrapped in the selfDrawCell
	 */
	public CellInterface getCell();

	/**
	 * Given an array of neighbors, updates the state of this selfDraw cell with
	 * respect to its neighbors using client-defined updateCell method in
	 * automaton plugin.
	 * 
	 * @param int[] csStates - the states of the neighbors
	 */
	public void updateCell(int[] csStates);

	/**
	 * Given a panel to draw on, this method draws the visualization of this
	 * cell at the its corresponding position using the client-defined
	 * drawCell(Cell.getState(), Cell.getColNum(), Cell.getRowNum()) method in
	 * visualizer plugin.
	 * 
	 * @param JPanel pane - the panel on which each cell should be drawn on
	 */
	public void drawCell(JPanel pane);
}
